//
// Created by Criinal Nicole on 2020/6/15.
// 定义超级块
//

#ifndef FILESYSTEM_SUPERNODE_H
#define FILESYSTEM_SUPERNODE_H

#include "Block.h"
#include "FileIndexNode.h"

namespace SUPER_NODE {

    class Super_Node {
    public:
//        标识口令
        int identifier = 2020;

//        存储空闲栈大小
        int _blockStackSize;

//        下一组空闲块栈的编号
        int _nextBlockStack;

//        存储空闲栈
        int _blockStack[BLOCK::BLOCK_SIZE_INT];

//        下一个空闲inode的编号
        int _nextInode{-1};

//        当前空闲inode编号
        int _curInode{-1};

    } extern SuperNode;

    void outPut(int);

    void init();

    void addDictionary(char *);

    void addFile(char *, char *);

    void deleteFile();

    void openFile(char *fileName);

    int iAlloc();

    void iFree(int blockId);

    int iGet();

    void iPut(int iNodeId);

    int nameI(char *filePath);

    int nameI(int iNodeId, char *fileName);

    void cd(char *);

//    在iNode节点下添加newINode的节点
    void addNewInode(FILE_INDEX_NODE::FileIndexNode &iNode,
                     int newINodeNum);

//    获取一个I节点并占用
    int getNewInode();

//    检查权限
    int checkPrivilege();

    void changePrivilege(int);

    void ls(int);

    void ls();

}


#endif //FILESYSTEM_SUPERNODE_H
